// API配置和服务
const BASE_URL = 'http://localhost:8080/api' // 开发环境
// const BASE_URL = 'https://your-domain.com/api' // 生产环境

// API接口配置
const API_CONFIG = {
  // 用户相关
  USER_LOGIN: '/users/login',
  USER_SMS_SEND: '/users/sms/send',
  USER_SMS_LOGIN: '/users/sms/login',
  USER_ADMIN_LOGIN: '/users/admin/login',
  USER_PROFILE: '/users/profile',
  USER_STATS: '/users/stats',

  // 用户管理相关（管理员）
  USERS_LIST: '/admin/users',
  USERS_DETAIL: '/admin/users',
  USERS_STATS: '/admin/users/stats',
  USERS_ENABLE: '/admin/users',
  USERS_DISABLE: '/admin/users',

  // 文件上传相关
  UPLOAD_IMAGE: '/upload/image',

  // Banner相关
  BANNERS_LIST: '/banners',
  BANNERS_ACTIVE: '/banners/active',
  BANNERS_DETAIL: '/banners',
  BANNERS_CREATE: '/banners',
  BANNERS_UPDATE: '/banners',
  BANNERS_DELETE: '/banners',
  BANNERS_ENABLE: '/banners',
  BANNERS_DISABLE: '/banners',
  BANNERS_SORT: '/banners/sort',
  BANNERS_UPLOAD: '/banners/upload',

  // 手工品相关
  PRODUCTS_LIST: '/products',
  PRODUCTS_DETAIL: '/products',
  PRODUCTS_CREATE: '/products',
  PRODUCTS_UPDATE: '/products',
  PRODUCTS_DELETE: '/products',
  PRODUCTS_ONLINE: '/products',
  PRODUCTS_OFFLINE: '/products',
  PRODUCTS_STATS: '/admin/products/stats',

  
  // 任务相关
  TASKS_LIST: '/tasks',
  TASKS_MY: '/tasks/my',
  TASKS_DETAIL: '/tasks',
  TASKS_CLAIM: '/tasks',
  TASKS_UPDATE: '/tasks',
  TASKS_SUBMIT: '/tasks/submit',
  TASKS_REVIEW: '/tasks/review',
  TASKS_RECLAIM: '/tasks/reclaim',
  TASKS_BATCH_STATUS: '/tasks/batch-status',
  TASKS_COUNT: '/tasks/my/count',
  TASKS_STATS: '/admin/tasks/stats',

  // 结算相关
  SETTLEMENTS_LIST: '/settlements',
  SETTLEMENTS_MY: '/settlements/my',
  SETTLEMENTS_DETAIL: '/settlements',
  SETTLEMENTS_CREATE: '/settlements',
  SETTLEMENTS_GENERATE: '/settlements/generate',
  SETTLEMENTS_CONFIRM: '/settlements/confirm',
  SETTLEMENTS_PAY: '/settlements/pay',
  SETTLEMENTS_BATCH_STATUS: '/settlements/batch-status',
  SETTLEMENTS_TOTAL: '/settlements/my/total'
}

/**
 * 网络请求封装
 */
class ApiService {
  constructor() {
    this.baseURL = BASE_URL
    this.token = null
  }

  /**
   * 设置认证token
   */
  setToken(token) {
    this.token = token
    wx.setStorageSync('token', token)
  }

  /**
   * 获取token
   */
  getToken() {
    if (!this.token) {
      this.token = wx.getStorageSync('token')
    }
    return this.token
  }

  /**
   * 清除token
   */
  clearToken() {
    this.token = null
    wx.removeStorageSync('token')
  }

  /**
   * 获取API配置
   */
  get apiConfig() {
    return API_CONFIG
  }

  /**
   * 通用请求方法
   */
  request(options) {
    const { url, method = 'GET', data = {}, header = {} } = options

    // 添加token
    const token = this.getToken()
    if (token) {
      header['Authorization'] = `Bearer ${token}`
    }

    return new Promise((resolve, reject) => {
      wx.showLoading({
        title: '加载中...',
        mask: true
      })

      wx.request({
        url: `${this.baseURL}${url}`,
        method,
        data,
        header: {
          'Content-Type': 'application/json',
          ...header
        },
        success: (res) => {
          wx.hideLoading()

          if (res.statusCode === 200) {
            const { code, message, data } = res.data
            if (code === 200) {
              resolve(data)
            } else if (code === 401) {
              // token过期，跳转登录页
              this.clearToken()
              wx.reLaunch({
                url: '/pages/login/login'
              })
              reject(new Error(message || '请重新登录'))
            } else {
              wx.showToast({
                title: message || '请求失败',
                icon: 'none'
              })
              reject(new Error(message || '请求失败'))
            }
          } else {
            wx.showToast({
              title: '网络异常',
              icon: 'none'
            })
            reject(new Error('网络异常'))
          }
        },
        fail: (error) => {
          wx.hideLoading()
          wx.showToast({
            title: '网络连接失败',
            icon: 'none'
          })
          reject(error)
        }
      })
    })
  }

  /**
   * GET请求
   */
  get(url, params = {}) {
    const queryString = Object.keys(params)
      .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`)
      .join('&')
    const fullUrl = queryString ? `${url}?${queryString}` : url

    return this.request({
      url: fullUrl,
      method: 'GET'
    })
  }

  /**
   * POST请求
   */
  post(url, data = {}) {
    return this.request({
      url,
      method: 'POST',
      data
    })
  }

  /**
   * PUT请求
   */
  put(url, data = {}) {
    return this.request({
      url,
      method: 'PUT',
      data
    })
  }

  /**
   * DELETE请求
   */
  delete(url) {
    return this.request({
      url,
      method: 'DELETE'
    })
  }

  // ==================== 用户相关接口 ====================

  /**
   * 微信登录
   */
  login(code, userInfo = {}) {
    return this.post(API_CONFIG.USER_LOGIN, {
      code,
      nickName: userInfo.nickName,
      avatarUrl: userInfo.avatarUrl
    })
  }

  /**
   * 发送短信验证码
   */
  sendSmsCode(phone) {
    return this.post(API_CONFIG.USER_SMS_SEND, { phone })
  }

  /**
   * 短信验证码登录
   */
  smsLogin(phone, smsCode) {
    return this.post(API_CONFIG.USER_SMS_LOGIN, {
      phone,
      smsCode
    })
  }

  /**
   * 管理员登录
   */
  adminLogin(username, password) {
    return this.post(API_CONFIG.USER_ADMIN_LOGIN, {
      username,
      password
    })
  }

  /**
   * 获取用户信息
   */
  getUserProfile() {
    return this.get(API_CONFIG.USER_PROFILE)
  }

  /**
   * 更新用户信息
   */
  updateUserProfile(userInfo) {
    return this.put(API_CONFIG.USER_PROFILE, userInfo)
  }

  /**
   * 获取用户统计信息
   */
  getUserStats() {
    return this.get(API_CONFIG.USER_STATS)
  }

  // ==================== 手工品相关接口 ====================

  /**
   * 获取手工品列表
   */
  getProductsList(params = {}) {
    return this.get(API_CONFIG.PRODUCTS_LIST, params)
  }

  /**
   * 获取手工品详情
   */
  getProductDetail(id) {
    return this.get(`${API_CONFIG.PRODUCTS_DETAIL}/${id}`)
  }

  /**
   * 创建手工品（管理员）
   */
  createProduct(productData) {
    return this.post(API_CONFIG.PRODUCTS_CREATE, productData)
  }

  /**
   * 更新手工品（管理员）
   */
  updateProduct(id, productData) {
    return this.put(`${API_CONFIG.PRODUCTS_UPDATE}/${id}`, productData)
  }

  /**
   * 删除手工品（管理员）
   */
  deleteProduct(id) {
    return this.delete(`${API_CONFIG.PRODUCTS_DELETE}/${id}`)
  }

  /**
   * 上架手工品（管理员）
   */
  onlineProduct(id) {
    return this.put(`${API_CONFIG.PRODUCTS_ONLINE}/${id}/online`)
  }

  /**
   * 下架手工品（管理员）
   */
  offlineProduct(id) {
    return this.put(`${API_CONFIG.PRODUCTS_OFFLINE}/${id}/offline`)
  }

  /**
   * 获取产品统计数据（管理员）
   */
  getProductsStats() {
    return this.get(API_CONFIG.PRODUCTS_STATS)
  }

  // ==================== Banner相关接口 ====================

  /**
   * 获取Banner列表
   */
  getBannersList(params = {}) {
    return this.get(API_CONFIG.BANNERS_LIST, params)
  }

  /**
   * 获取启用的Banner列表（前端展示用）
   */
  getActiveBanners() {
    return this.get(API_CONFIG.BANNERS_ACTIVE)
  }

  /**
   * 获取Banner详情
   */
  getBannerDetail(id) {
    return this.get(`${API_CONFIG.BANNERS_DETAIL}/${id}`)
  }

  /**
   * 创建Banner（管理员）
   */
  createBanner(bannerData) {
    return this.post(API_CONFIG.BANNERS_CREATE, bannerData)
  }

  /**
   * 更新Banner（管理员）
   */
  updateBanner(id, bannerData) {
    return this.put(`${API_CONFIG.BANNERS_UPDATE}/${id}`, bannerData)
  }

  /**
   * 删除Banner（管理员）
   */
  deleteBanner(id) {
    return this.delete(`${API_CONFIG.BANNERS_DELETE}/${id}`)
  }

  /**
   * 启用Banner（管理员）
   */
  enableBanner(id) {
    return this.put(`${API_CONFIG.BANNERS_ENABLE}/${id}/enable`)
  }

  /**
   * 禁用Banner（管理员）
   */
  disableBanner(id) {
    return this.put(`${API_CONFIG.BANNERS_DISABLE}/${id}/disable`)
  }

  /**
   * 批量更新Banner排序（管理员）
   */
  updateBannerSort(sortData) {
    return this.put(API_CONFIG.BANNERS_SORT, sortData)
  }

  
  // ==================== 任务相关接口 ====================

  /**
   * 获取任务列表（管理员）
   */
  getTasksList(params = {}) {
    return this.get(API_CONFIG.TASKS_LIST, params)
  }

  /**
   * 获取用户任务列表
   */
  getMyTasks(params = {}) {
    return this.get(API_CONFIG.TASKS_MY, params)
  }

  /**
   * 获取任务详情
   */
  getTaskDetail(id) {
    return this.get(`${API_CONFIG.TASKS_DETAIL}/${id}`)
  }

  /**
   * 领取任务
   */
  claimTask(taskData) {
    return this.post(API_CONFIG.TASKS_CLAIM, taskData)
  }

  /**
   * 更新任务信息
   */
  updateTask(id, taskData) {
    return this.put(`${API_CONFIG.TASKS_UPDATE}/${id}`, taskData)
  }

  /**
   * 提交任务
   */
  submitTask(id, submitData) {
    return this.put(`${API_CONFIG.TASKS_SUBMIT}/${id}/submit`, submitData)
  }

  /**
   * 审核任务（管理员）
   */
  reviewTask(id, reviewData) {
    return this.put(`${API_CONFIG.TASKS_REVIEW}/${id}/review`, reviewData)
  }

  /**
   * 回收任务（管理员）
   */
  reclaimTask(id) {
    return this.put(`${API_CONFIG.TASKS_RECLAIM}/${id}/reclaim`)
  }

  /**
   * 批量更新任务状态（管理员）
   */
  batchUpdateTaskStatus(batchData) {
    return this.put(API_CONFIG.TASKS_BATCH_STATUS, batchData)
  }

  /**
   * 获取用户任务统计
   */
  getMyTaskCount() {
    return this.get(API_CONFIG.TASKS_COUNT)
  }

  /**
   * 获取任务统计数据（管理员）
   */
  getTasksStats() {
    return this.get(API_CONFIG.TASKS_STATS)
  }

  // ==================== 结算相关接口 ====================

  /**
   * 获取结算单列表（管理员）
   */
  getSettlementsList(params = {}) {
    return this.get(API_CONFIG.SETTLEMENTS_LIST, params)
  }

  /**
   * 获取用户结算单列表
   */
  getMySettlements(params = {}) {
    return this.get(API_CONFIG.SETTLEMENTS_MY, params)
  }

  /**
   * 获取结算单详情
   */
  getSettlementDetail(id) {
    return this.get(`${API_CONFIG.SETTLEMENTS_DETAIL}/${id}`)
  }

  /**
   * 创建结算单（管理员）
   */
  createSettlement(settlementData) {
    return this.post(API_CONFIG.SETTLEMENTS_CREATE, settlementData)
  }

  /**
   * 自动生成结算单（管理员）
   */
  generateSettlement(generateData) {
    return this.post(API_CONFIG.SETTLEMENTS_GENERATE, generateData)
  }

  /**
   * 确认结算单
   */
  confirmSettlement(id) {
    return this.put(`${API_CONFIG.SETTLEMENTS_CONFIRM}/${id}/confirm`)
  }

  /**
   * 支付结算单（管理员）
   */
  paySettlement(id) {
    return this.put(`${API_CONFIG.SETTLEMENTS_PAY}/${id}/pay`)
  }

  /**
   * 批量更新结算状态（管理员）
   */
  batchUpdateSettlementStatus(batchData) {
    return this.put(API_CONFIG.SETTLEMENTS_BATCH_STATUS, batchData)
  }

  /**
   * 获取用户结算总金额
   */
  getMySettlementTotal() {
    return this.get(API_CONFIG.SETTLEMENTS_TOTAL)
  }

  // ==================== 用户管理相关接口 ====================

  /**
   * 获取用户列表（管理员）
   */
  getUsersList(params = {}) {
    return this.get(API_CONFIG.USERS_LIST, params)
  }

  /**
   * 获取用户统计数据（管理员）
   */
  getUsersStats() {
    return this.get(API_CONFIG.USERS_STATS)
  }

  /**
   * 获取用户详情（管理员）
   */
  getUserDetail(id) {
    return this.get(`${API_CONFIG.USERS_DETAIL}/${id}`)
  }

  /**
   * 启用用户（管理员）
   */
  enableUser(id) {
    return this.put(`${API_CONFIG.USERS_ENABLE}/${id}/enable`)
  }

  /**
   * 禁用用户（管理员）
   */
  disableUser(id) {
    return this.put(`${API_CONFIG.USERS_DISABLE}/${id}/disable`)
  }
}

// 创建API服务实例
const apiService = new ApiService()

module.exports = {
  apiService,
  API_CONFIG,
  BASE_URL
}